home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 145 / Gekkan Dennou Club - 2000.6 Vol. 145 (Japan).7z / Gekkan Dennou Club - 2000.6 Vol. 145 (Japan) (Track 1).bin / games / spassion / source.lzh / SOURCE / FuncEnemy / BOSS_M00.C < prev    next >
Text File  |  2000-03-21  |  4KB  |  149 lines

  1. /*
  2. #include <stdio.h>
  3. #include <iocslib.h>
  4. */
  5. /* 直進、回れ右で退却 */
  6. #include <xsp2lib.h>
  7. #include "../SPASSION.H"
  8. #include "../player.h"
  9. #include "../enemy.h"
  10. #include "../eshot.h"
  11. #include "../effect.h"
  12. #include "../priority.h"
  13. #include "../sound.h"
  14. #include "../entry.h"
  15. #include "../SUB.H"
  16. #ifndef NULL
  17. #define NULL ((void *) 0)
  18. #endif
  19.  
  20. #define P_X    (*((short *) (&player[0].lx)))    /*lxの上位ワード*/
  21. #define P_Y    (*((short *) (&player[0].ly)))    /*lyの上位ワード*/
  22.  
  23. #define PALET_MAIN    0x0500
  24.  
  25. extern short    obj_boss_m00;
  26. short enemy_explode( ENEMY *ene );
  27. static short MoveEnemyBossM00(ENEMY *);
  28. /*static void TiniEnemyBossM00(ENEMY *);*/
  29.  
  30. #define PT_ST    8
  31. #define PT_END    8+7
  32. static HIT_XY4    hit_p[]={
  33.     0-8-PLAYER_HIT_X,0-8-PLAYER_HIT_Y,0+8+PLAYER_HIT_X,0+8+PLAYER_HIT_Y
  34. };
  35. static HIT_XY4    hit_o[]={0-8-OPTION_HIT_X,0-8-OPTION_HIT_Y,0+8+OPTION_HIT_X,0+8+OPTION_HIT_Y};
  36. static HIT_XY4    hit_s[]={0-8,0-8,0+8,0+8};
  37.  
  38. void InitEnemyBossM00Hit( void )
  39. {
  40. }
  41.  
  42. void InitEnemyBossM00(ENEMY *ene)
  43. {
  44.     ene->vx             = vx_tbl[15][192];
  45.     ene->vy             = vy_tbl[15][192];
  46.     ene->angle         = 192;
  47.     ene->pt             = obj_boss_m00 + ((ene->angle) >> 3);
  48.     ene->info         = PALET_MAIN | PRIORITY_ZAKO;
  49.     ene->hit_p[0]     = &hit_p[0];ene->hit_p[1]=NULL;
  50.     ene->hit_o[0]     = &hit_o[0];ene->hit_o[1]=NULL;
  51.     ene->hit_s[0]     = &hit_s[0];ene->hit_s[1]=NULL;
  52.     ene->hp             = 20;
  53.     ene->no_dead     = 0;
  54.     ene->func_enemy_move = MoveEnemyBossM00;
  55. /*    ene->func_enemy_tini = TiniEnemyBossM00;*/
  56. }
  57.  
  58.  
  59. static short MoveEnemyBossM00( ENEMY *ene )
  60. {
  61.     unsigned char angle;
  62.  
  63.     /* 速度を足して上位ワード(固定整数部)だけ取り出す */
  64.     ene->x = (ene->lx += ene->vx) >> 16;
  65.     ene->y = (ene->ly += ene->vy) >> 16;
  66. /*ene->state=5;*/
  67.     switch (ene->state){
  68.     case 0:
  69.         /* 折り返す */
  70.         if( ENE_X < 128 ){
  71.             if( ENE_Y < 128 ){
  72.                 ene->arg=1;
  73.             }else{
  74.                 ene->arg=0;
  75.             }
  76.             ene->state++;
  77.         }
  78.         break;
  79.     case 1:
  80.         if( ene->arg )
  81.             ene->angle-=2;
  82.         else
  83.             ene->angle+=2;
  84.         ene->angle&=255;
  85.         ene->pt  = obj_boss_m00 + ((ene->angle) >> 3);
  86.         ene->info = PALET_MAIN | PRIORITY_ZAKO;
  87.         if( ene->angle == 64 ){
  88.             switch ( level ){
  89.             case NOMAL:
  90.                 MakeEShot(ESHOT_RING01, ENE_X, ENE_Y, 5, angle=calc_direction( ENE_X, ENE_Y, P_X+CENTER_X, P_Y ), 4,0,ene);
  91.                 MakeEShot(ESHOT_RING01, ENE_X, ENE_Y, 5, (angle-12)&255, 4,0,ene);
  92.                 MakeEShot(ESHOT_RING01, ENE_X, ENE_Y, 5, (angle+12)&255, 4,0,ene);
  93.                 SetSE(SE_ESHOT_RING);    /* 敵ショット音 */
  94.                 break;
  95.             case HARD:
  96.                 MakeEShot(ESHOT_RING01, ENE_X, ENE_Y, 5, angle=calc_direction( ENE_X, ENE_Y, P_X+CENTER_X, P_Y ), 4,0,ene);
  97.                 MakeEShot(ESHOT_RING01, ENE_X, ENE_Y, 5, (angle-12)&255, 4,0,ene);
  98.                 MakeEShot(ESHOT_RING01, ENE_X, ENE_Y, 5, (angle+12)&255, 4,0,ene);
  99.                 MakeEShot(ESHOT_RING02, ENE_X, ENE_Y, 3, angle, 4,0,ene);
  100.                 MakeEShot(ESHOT_RING02, ENE_X, ENE_Y, 3, (angle-24)&255, 4,0,ene);
  101.                 MakeEShot(ESHOT_RING02, ENE_X, ENE_Y, 3, (angle+24)&255, 4,0,ene);
  102.                 SetSE(SE_ESHOT_RING);    /* 敵ショット音 */
  103.                 break;
  104.             }
  105.             ene->state++;
  106.         }
  107.     case 2:
  108.         /* 画面外に出たら消去 */
  109.         if( ENE_X > 256 + 32 )
  110.             return (0);
  111.     }
  112.     ene->vx=vx_tbl[15][ene->angle];
  113.     ene->vy=vy_tbl[15][ene->angle];
  114.  
  115.     /* ダメージを受けた時の処理 */
  116.     if(ene->damage){
  117.         SetSE(SE_DAMAGE);    /* 効果音 */
  118.         ene->info = PALET_DAMAGE | PRIORITY_BOSS;    /*パレット変更*/
  119.         /* 破壊された */
  120.         if((ene->hp -= ene->damage) <= 0) {
  121.             MakeEffect(EFFECT_EXPL, 0, ene->x, ene->y);
  122.             SetSE(SE_EXPL_MBOSS);    /* 爆発音 */
  123.             if(disp_level == DISP_LEVEL_HIGH)
  124.                 MakeEffect (EFFECT_HAHENMINI, 0, ene->x, ene->y);
  125.             if(!eshot_erase)
  126.                 eshot_erase = ESHOT_ERASE;    /* 弾消し */
  127.             ene->player->score += 3;
  128.             return (0);    /* 消去 */
  129.         }
  130.         ene->damage = 0;
  131.     }else
  132.         ene->info = PALET_MAIN | PRIORITY_ZAKO;
  133.  
  134. /*    ene->hit_p[0] = &hit_p[ene->anim_count];
  135.     ene->hit_o[0] = &hit_o[ene->anim_count];
  136.     ene->hit_s[0] = &hit_s[ene->anim_count];
  137. */
  138.     xobj_set_st(ene);
  139.  
  140.     return(1);
  141. }
  142.  
  143. /*
  144. static void TiniEnemyBossM00(ENEMY * p)
  145. {
  146.     entry_control -= ENTRY_CONTROL_ADD;
  147. }
  148. */
  149.